import { message, notification } from 'antd';
{{#if loading}}
import Loading from '@/components/Loading';
{{/if}}
import {getResponseFailMessage,} from './common'

import type {CustomRequestConfig} from './typings'
{{#if loading}}
const loading = new Loading();
{{/if}}
 
// 运行时配置
export const requestConfig: CustomRequestConfig = {
  // 统一的请求设定
  timeout: 100000,
  headers: {'X-Requested-With': 'XMLHttpRequest'},
  {{#if loading}}
  showLoading: true,
  {{/if}}
  // 错误处理
  errorConfig: {
    // 错误接收及处理
    errorHandler: (error: any, opts: any) => {

      if (opts?.skipErrorHandler) throw error;
      {{#if loading}}
      if(error?.config?.showLoading)loading?.close();
      {{/if}}
      if (error.response) {
        // Axios 的错误
        // 请求成功发出且服务器也响应了状态码，但状态代码超出了 2xx 的范围
        // message.error(`Response status:${error.response.status} message: ${ getResponseFailMessage(error.response)}`);
        notification.error({
          description: `${ getResponseFailMessage(error.response)}`,
          message: `Response status:${error.response.status} `,
        });
      } else if (error.request) {
        // 请求已经成功发起，但没有收到响应
        // \`error.request\` 在浏览器中是 XMLHttpRequest 的实例，
        // 而在node.js中是 http.ClientRequest 的实例
        notification.error({
          message: 'None response! Please retry.',
        });
      } else {
        // 发送请求时出了点问题
        notification.error({
          message: 'Request error, please retry.',
        });
      }
    },
 
  },
 
  // 请求拦截
  requestInterceptors: [
    (config) => {
      {{#if loading}}
      if(config.showLoading)loading?.open();
      {{/if}}
    // 拦截请求配置，进行个性化处理。
      return config
    }
  ],
 
  // 响应拦截器
  responseInterceptors: [
    (response) => {
      {{#if loading}}
      if(response.config.showLoading)loading?.close();
      {{/if}}
       // 拦截响应数据，进行个性化处理
       const { data } = response;
       if(data.code !== 200){
         message.error(data.msg || '请求失败！');
       }
       return response;
    }
  ]
};